﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web.UI;
using SisEagle.Common.Code;
using SisEagle.IView.Cadastro;
using SisEagle.View.Web.Base;
using SisEagleVO;

namespace SisEagle.View.Web.Cadastro
{
    public partial class Categoria : Base.WebPageBase, ICategoriaView
    {
        int count = 0;

        #region Singleton

        private SisEagleBO.CategoriasBO _CategoriasBusiness;

        private SisEagleBO.CategoriasBO CategoriasBusiness
        {
            get
            {
                if (_CategoriasBusiness == null)
                    _CategoriasBusiness = new SisEagleBO.CategoriasBO();

                return _CategoriasBusiness;
            }
        }

        #endregion Singleton

        #region Page-Load/OnInit

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            PaginaAtual = "~/Cadastro/Categoria.aspx";
            PaginaLista = "~/Cadastro/Categorias.aspx";
            initialize();
            

        }

        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {
               
                // Verifica se esta editando um registro
                if (Request.ExisteId())
                {

                    if (!Request.GetIdToInt().Equals(0))
                    {
                        DataSet ClientesData = CategoriasBusiness.FindBy_CodCategoria(Request.GetIdToInt());
                        var clientesEntity = ClientesData.Tables["Categorias"];

                        // Quando a entidade não for encontrada retorna a mensagem de registro não encontrado
                        if (clientesEntity == null)
                        {
                            return;
                        }
                        Acao = ActionData.Update;

                        SetView(clientesEntity);
                    }
                }

                // Criando um novo registro
                else
                {

                    NovosDados();
                }
            }
        }

        private void initialize()
        {
            UcbotoesCadastro.BotaoSalvar.Click += (BotaoSalvar_Click);
            UcbotoesCadastro.BotaoNovo.Click += (BotaoNovo_Click);
            UcbotoesCadastro.BotaoExcluir.Click += (BotaoExcluir_Click);
            UcbotoesCadastro.BotaoSalvarFechar.Click += (BotaoSalvarFechar_Click);
            UcbotoesCadastro.BotaoCancelar.Click += (s, ev) => Response.Redirect(PaginaLista,false);
        }

        #endregion Page-Load/OnInit

        #region Acoes Botoes

        private void BotaoNovo_Click(object sender, ImageClickEventArgs e)
        {
            RedirecionaSalvar = Redirecionamento.PaginaAtual;
            SalvarDados();
            NovosDados();
            limpartela();
        }



        private void BotaoSalvarFechar_Click(object sender, ImageClickEventArgs e)
        {
            RedirecionaSalvar = Redirecionamento.PaginaLista;
            SalvarDados();
            Response.Redirect(PaginaLista,false);
        }

        private void BotaoExcluir_Click(object sender, ImageClickEventArgs e)
        {

            if (count > 0)
                return;
            RedirecionaSalvar = Redirecionamento.PaginaLista;
            Acao = ActionData.Delete;
            SalvarDados();
            NovosDados();
            count++;
        }

        private void BotaoSalvar_Click(object sender, ImageClickEventArgs e)
        {
            if (count > 0)
                return;
            RedirecionaSalvar = Redirecionamento.NaoRedirecionar;
            SalvarDados();
            NovosDados();
            count++;
        }

        #endregion Acoes Botoes

        #region Binding

        public List<Mensagem> Mensagens
        {
            set
            {
                UcbotoesCadastro.AddMensagem(value);

                if (!UcbotoesCadastro.HasError)
                {
                    Redireciona(UcbotoesCadastro.HasError);
                }
            }
        }

        private ActionData _Acao;

        [SaveInViewState]
        public ActionData Acao
        {
            get
            {
                return _Acao;
            }
            set
            {
                _Acao = value;
                UcbotoesCadastro.SetAcao(value);
            }
        }

        public int CodCategoria
        {
            get
            {
                if (string.IsNullOrEmpty(txtCodigo.Text) || !(UtilsNumber.IsNumber(txtCodigo.Text)))
                {
                    return 0;
                }
                else
                    return Convert.ToInt32(txtCodigo.Text);
            }
            set
            {
                txtCodigo.Text = value.ToString();
            }
        }

        public string Descricao
        {
            get
            {
                if (string.IsNullOrEmpty(txtDescricao.Text))
                    return string.Empty;

                else
                    return txtDescricao.Text.TrimStart();
            }
            set
            {
                txtDescricao.Text = value;
            }
        }

        public string NomeCategoria
        {
            get
            {
                if (string.IsNullOrEmpty(txtNome.Text))
                    return string.Empty;

                else
                    return txtNome.Text.TrimStart();
            }

            set
            {
                txtNome.Text = value;
            }
        }

        #endregion Binding

        #region SetView - GetView - Novo

        private void SetView(DataTable CategoriasEntity)
        {
            CodCategoria = Convert.ToInt32(CategoriasEntity.Rows[0]["CodCategoria"]);
            NomeCategoria = CategoriasEntity.Rows[0]["NomeCategoria"].ToString();
            Descricao = CategoriasEntity.Rows[0]["Descricao"].ToString();
        }

        private CategoriasVO GetView()
        {
            return new CategoriasVO
            {
                CodCategoria = CodCategoria,
                Descricao = Descricao,
                NomeCategoria = NomeCategoria,
            };
        }

        private void NovosDados()
        {
            Acao = ActionData.New;
            NomeCategoria = string.Empty;
            Descricao = string.Empty;
            txtCodigo.Text = string.Empty;
            txtCodigo.Enabled = false;
        }

        private void limpartela()
        {
            txtCodigo.Text = string.Empty;
            txtDescricao.Text = string.Empty;
            txtNome.Text = string.Empty;
        }

        #endregion SetView - GetView - Novo

        #region Crud

        private void SalvarDados()
        {
            //Instancia da entidade que sera Salva
             CategoriasVO CategoriasEntity = new CategoriasVO();
            int controlador = 0;

            CategoriasEntity = GetView();

            if(Acao ==ActionData.Delete)
            {
                if (ValidaExclusao(CategoriasEntity))
                {

                }

             

            }

            switch (Acao)
            {
                case ActionData.New: controlador = CategoriasBusiness.Insert(CategoriasEntity);
                    break;

                case ActionData.Update: controlador = CategoriasBusiness.Update(CategoriasEntity);
                    break;

                case ActionData.Delete: controlador = CategoriasBusiness.Delete(CategoriasEntity);
                    break;

                case ActionData.None:
                default:
                    break;
            }
            MonstraMensagem(controlador, Acao);

        }

        private bool ValidaExclusao(CategoriasVO CategoriasEntity)
        {
            var podeexcluir = CategoriasBusiness.PodeExcluir(CategoriasEntity);

            return true;
        }

        #endregion Crud

        #region Mensagem
        public void MonstraMensagem(int controlador, ActionData Acao)
        {
            if ((controlador == 1) && (Acao == ActionData.New))
            {
                UcbotoesCadastro.AdicionaMensagem("Registro salvo com sucesso!",MensagemTipo.Aviso);
                
            }
            if ((controlador == 1) && (Acao == ActionData.Update))
            {
                UcbotoesCadastro.AdicionaMensagem("Registro alterado com sucesso!",MensagemTipo.Aviso);
            }
            if ((controlador == 1) && (Acao == ActionData.Delete))
            {
                UcbotoesCadastro.AdicionaMensagem("Registro deletado com sucesso!",MensagemTipo.Aviso);
            }
        }

        #endregion
    }
}